Libérez la puissance de Pandas GroupBy pour l'analyse de données. Ce guide explore les techniques d'agrégation et de transformation avec des exemples concrets pour les données internationales.
Maîtriser les opérations GroupBy de Pandas : Agrégation vs Transformation
Pandas, la pierre angulaire de la manipulation de données en Python, offre un outil puissant pour analyser et comprendre les données : l'opération GroupBy. Cette fonctionnalité vous permet de segmenter vos données en groupes basés sur des caractéristiques communes, puis d'appliquer des fonctions à ces groupes, révélant des informations qui resteraient autrement cachées. Cet article explore en profondeur deux opérations clés de GroupBy : l'agrégation et la transformation, en fournissant des exemples et des explications pratiques adaptés aux professionnels des données du monde entier.
Comprendre le concept de GroupBy
À la base, GroupBy est un processus qui implique trois étapes principales : diviser les données en groupes en fonction d'un ou plusieurs critères, appliquer une fonction à chaque groupe indépendamment et combiner les résultats dans une nouvelle structure de données. Cette stratégie de « diviser-appliquer-combiner » est un concept fondamental de l'analyse de données et fournit un cadre flexible pour explorer des ensembles de données complexes.
La puissance de GroupBy réside dans sa capacité à gérer divers types et structures de données, ce qui le rend applicable dans divers domaines. Que vous analysiez des données de vente de plusieurs régions, des relevés de capteurs de différents appareils ou l'activité des médias sociaux à travers des données démographiques, GroupBy peut vous aider à extraire des informations significatives.
Agrégation : Résumer les données dans les groupes
L'agrégation est le processus de calcul des statistiques récapitulatives pour chaque groupe. Ces statistiques fournissent un aperçu concis des caractéristiques du groupe, vous permettant de comparer et de contraster différents segments de vos données. Les fonctions d'agrégation courantes incluent :
sum(): Calcule la somme des valeurs de chaque groupe.mean(): Calcule la valeur moyenne de chaque groupe.median(): Calcule la valeur médiane de chaque groupe.min(): Trouve la valeur minimale de chaque groupe.max(): Trouve la valeur maximale de chaque groupe.count(): Compte le nombre de valeurs non nulles de chaque groupe.size(): Renvoie la taille de chaque groupe (y compris les valeurs nulles).std(): Calcule l'écart type de chaque groupe.var(): Calcule la variance de chaque groupe.
Exemples pratiques d'agrégation
Considérons un ensemble de données de ventes internationales pour une entreprise de commerce électronique hypothétique. Les données comprennent des informations sur la catégorie de produit, le pays de vente et le montant des ventes.
import pandas as pd
# Données d'exemple
data = {
'Category': ['Electronics', 'Clothing', 'Electronics', 'Clothing', 'Home Goods', 'Electronics', 'Clothing', 'Home Goods'],
'Country': ['USA', 'UK', 'Canada', 'USA', 'Germany', 'UK', 'Canada', 'Germany'],
'Sales': [100, 50, 75, 60, 80, 90, 45, 70]
}
df = pd.DataFrame(data)
print(df)
Cela affichera :
Category Country Sales
0 Electronics USA 100
1 Clothing UK 50
2 Electronics Canada 75
3 Clothing USA 60
4 Home Goods Germany 80
5 Electronics UK 90
6 Clothing Canada 45
7 Home Goods Germany 70
Exemple 1 : Calcul du total des ventes par catégorie
Pour calculer le total des ventes pour chaque catégorie de produit, nous pouvons utiliser la méthode groupby() suivie de la fonction d'agrégation sum().
category_sales = df.groupby('Category')['Sales'].sum()
print(category_sales)
Cela affichera :
Category
Clothing 155
Electronics 265
Home Goods 150
Name: Sales, dtype: int64
Exemple 2 : Calcul des ventes moyennes par pays
De même, pour calculer les ventes moyennes par pays, nous pouvons utiliser la fonction d'agrégation mean().
country_sales = df.groupby('Country')['Sales'].mean()
print(country_sales)
Cela affichera :
Country
Canada 60.0
Germany 75.0
UK 70.0
USA 80.0
Name: Sales, dtype: float64
Exemple 3 : Utilisation de plusieurs fonctions d'agrégation
Pandas vous permet d'appliquer plusieurs fonctions d'agrégation simultanément à l'aide de la méthode agg(). Cela fournit un résumé complet des caractéristiques du groupe.
category_summary = df.groupby('Category')['Sales'].agg(['sum', 'mean', 'median', 'count'])
print(category_summary)
Cela affichera :
sum mean median count
Category
Clothing 155 51.666667 50.0 3
Electronics 265 88.333333 90.0 3
Home Goods 150 75.000000 75.0 2
Exemple 4 : Fonctions d'agrégation personnalisées
Vous pouvez également définir vos propres fonctions d'agrégation personnalisées à l'aide d'expressions lambda ou de fonctions nommées. Cela vous permet de calculer des statistiques spécifiques qui ne sont pas disponibles dans les fonctions d'agrégation standard.
# Fonction personnalisée pour calculer la plage (max - min)
def custom_range(x):
return x.max() - x.min()
category_summary = df.groupby('Category')['Sales'].agg(['sum', 'mean', custom_range])
print(category_summary)
Cela affichera :
sum mean custom_range
Category
Clothing 155 51.666667 15
Electronics 265 88.333333 25
Home Goods 150 75.000000 10
Transformation : Modification des données dans les groupes
La transformation, en revanche, implique de modifier les données de chaque groupe en fonction d'un certain calcul. Contrairement à l'agrégation, qui renvoie une valeur résumée pour chaque groupe, la transformation renvoie une valeur pour chaque ligne des données d'origine, mais la valeur est calculée en fonction du groupe auquel cette ligne appartient. Les opérations de transformation conservent l'index et la forme d'origine du DataFrame.
Les cas d'utilisation courants de la transformation incluent :
- Standardisation des données dans chaque groupe.
- Calcul du rang ou du percentile dans chaque groupe.
- Remplissage des valeurs manquantes en fonction des statistiques du groupe.
Exemples pratiques de transformation
Continuons avec nos données de ventes internationales. Nous pouvons appliquer une transformation pour effectuer des calculs liés aux chiffres de vente dans chaque pays.
Exemple 1 : Standardisation des données de vente dans chaque pays (score Z)
La standardisation des données implique de transformer les valeurs pour qu'elles aient une moyenne de 0 et un écart type de 1. Ceci est utile pour comparer les données sur différentes échelles et distributions. Nous pouvons utiliser la méthode transform() avec une expression lambda pour y parvenir.
from scipy.stats import zscore
df['Sales_Zscore'] = df.groupby('Country')['Sales'].transform(zscore)
print(df)
Cela affichera :
Category Country Sales Sales_Zscore
0 Electronics USA 100 1.000000
1 Clothing UK 50 -1.000000
2 Electronics Canada 75 1.000000
3 Clothing USA 60 -1.000000
4 Home Goods Germany 80 1.000000
5 Electronics UK 90 1.000000
6 Clothing Canada 45 -1.000000
7 Home Goods Germany 70 -1.000000
La colonne Sales_Zscore contient désormais les valeurs de vente standardisées pour chaque pays. Les valeurs supérieures à 0 sont supérieures aux ventes moyennes de ce pays, et les valeurs inférieures à 0 sont inférieures à la moyenne.
Exemple 2 : Calcul du rang des ventes dans chaque catégorie
Pour calculer le rang de chaque vente dans sa catégorie, nous pouvons utiliser la méthode rank() dans la fonction transform().
df['Sales_Rank'] = df.groupby('Category')['Sales'].transform(lambda x: x.rank(method='dense'))
print(df)
Cela affichera :
Category Country Sales Sales_Zscore Sales_Rank
0 Electronics USA 100 1.000000 3.0
1 Clothing UK 50 -1.000000 2.0
2 Electronics Canada 75 1.000000 1.0
3 Clothing USA 60 -1.000000 3.0
4 Home Goods Germany 80 1.000000 2.0
5 Electronics UK 90 1.000000 2.0
6 Clothing Canada 45 -1.000000 1.0
7 Home Goods Germany 70 -1.000000 1.0
La colonne Sales_Rank indique le rang de chaque vente dans sa catégorie respective. L'argument method='dense' garantit que des rangs consécutifs sont attribués sans lacunes.
Exemple 3 : Remplissage des valeurs manquantes en fonction de la moyenne du groupe
Introduisons des valeurs manquantes dans les données de vente, puis remplissons-les en fonction des ventes moyennes pour chaque pays.
import numpy as np
# Introduire les valeurs manquantes
df.loc[[0, 3], 'Sales'] = np.nan
print(df)
# Remplir les valeurs manquantes en fonction de la moyenne du pays
df['Sales_Filled'] = df['Sales'].fillna(df.groupby('Country')['Sales'].transform('mean'))
print(df)
Le DataFrame initial avec des valeurs manquantes ressemblerait à ceci :
Category Country Sales Sales_Zscore Sales_Rank
0 Electronics USA NaN 1.000000 3.0
1 Clothing UK 50 -1.000000 2.0
2 Electronics Canada 75 1.000000 1.0
3 Clothing USA NaN -1.000000 3.0
4 Home Goods Germany 80 1.000000 2.0
5 Electronics UK 90 1.000000 2.0
6 Clothing Canada 45 -1.000000 1.0
7 Home Goods Germany 70 -1.000000 1.0
Et après avoir rempli les valeurs manquantes :
Category Country Sales Sales_Zscore Sales_Rank Sales_Filled
0 Electronics USA NaN 1.000000 3.0 NaN
1 Clothing UK 50 -1.000000 2.0 50.0
2 Electronics Canada 75 1.000000 1.0 75.0
3 Clothing USA NaN -1.000000 3.0 NaN
4 Home Goods Germany 80 1.000000 2.0 80.0
5 Electronics UK 90 1.000000 2.0 90.0
6 Clothing Canada 45 -1.000000 1.0 45.0
7 Home Goods Germany 70 -1.000000 1.0 70.0
Remarque importante : Comme il n'y avait pas de moyenne existante pour « USA », les valeurs résultantes dans Sales_Filled sont NaN. La gestion des cas limites tels que celui-ci est cruciale pour une analyse de données fiable et doit être prise en compte lors de la mise en œuvre.
Agrégation vs Transformation : principales différences
Bien que l'agrégation et la transformation soient toutes deux de puissantes opérations GroupBy, elles servent des objectifs différents et ont des caractéristiques distinctes :
- Forme de sortie : L'agrégation réduit la taille des données, en renvoyant une seule valeur pour chaque groupe. La transformation conserve la taille d'origine des données, en renvoyant une valeur transformée pour chaque ligne.
- Objectif : L'agrégation est utilisée pour résumer les données et obtenir des informations sur les caractéristiques du groupe. La transformation est utilisée pour modifier les données dans les groupes, souvent à des fins de standardisation ou de normalisation.
- Valeur de retour : L'agrégation renvoie un nouveau DataFrame ou une nouvelle série avec les valeurs agrégées. La transformation renvoie une série avec les valeurs transformées, qui peuvent ensuite être ajoutées sous forme de nouvelle colonne au DataFrame d'origine.
Le choix entre l'agrégation et la transformation dépend de vos objectifs analytiques spécifiques. Si vous devez résumer les données et comparer les groupes, l'agrégation est le bon choix. Si vous devez modifier les données dans les groupes tout en conservant la structure de données d'origine, la transformation est la meilleure option.
Techniques GroupBy avancées
Au-delà de l'agrégation et de la transformation de base, Pandas GroupBy offre une gamme de techniques avancées pour une analyse de données plus sophistiquée.
Application de fonctions personnalisées avec apply()
La méthode apply() offre le plus de flexibilité, vous permettant d'appliquer n'importe quelle fonction personnalisée à chaque groupe. Cette fonction peut effectuer n'importe quelle opération, y compris l'agrégation, la transformation ou même des calculs plus complexes.
def custom_function(group):
# Calculer la somme des ventes pour chaque catégorie dans un groupe, uniquement s'il y a plus d'une ligne dans le groupe
if len(group) > 1:
group['Sales_Sum'] = group['Sales'].sum()
else:
group['Sales_Sum'] = 0 # Ou une autre valeur par défaut
return group
df_applied = df.groupby('Country').apply(custom_function)
print(df_applied)
Dans cet exemple, nous définissons une fonction personnalisée qui calcule la somme des ventes dans chaque groupe (pays). La méthode apply() applique cette fonction à chaque groupe, ce qui donne une nouvelle colonne contenant la somme des ventes pour ce groupe.
Remarque importante : La fonction apply peut être plus coûteuse en calcul que les autres méthodes. Optimisez votre code et envisagez d'autres implémentations lorsque vous travaillez avec des ensembles de données massifs.
Regroupement par plusieurs colonnes
Vous pouvez regrouper vos données par plusieurs colonnes pour créer des segments plus granulaires. Cela vous permet d'analyser les données en fonction de l'intersection de plusieurs caractéristiques.
category_country_sales = df.groupby(['Category', 'Country'])['Sales'].sum()
print(category_country_sales)
Cela regroupera les données par Category et Country, vous permettant de calculer le total des ventes pour chaque catégorie dans chaque pays. Cela fournit une vue plus détaillée des performances des ventes dans différentes régions et gammes de produits.
Itération à travers des groupes
Pour une analyse plus complexe, vous pouvez itérer à travers les groupes à l'aide d'une boucle for. Cela vous permet d'accéder à chaque groupe individuellement et d'effectuer des opérations personnalisées sur celui-ci.
for name, group in df.groupby('Category'):
print(f"Catégorie: {name}")
print(group)
Cela itérera sur chaque catégorie de produit et imprimera les données correspondantes. Cela peut être utile pour effectuer une analyse personnalisée ou générer des rapports pour chaque catégorie.
Meilleures pratiques pour l'utilisation de GroupBy
Pour garantir une utilisation efficace et performante de GroupBy, tenez compte des bonnes pratiques suivantes :
- Comprenez vos données : Avant d'appliquer
GroupBy, prenez le temps de comprendre vos données et d'identifier les critères de regroupement pertinents et les fonctions d'agrégation/transformation. - Choisissez la bonne opération : Réfléchissez attentivement si l'agrégation ou la transformation est le bon choix pour vos objectifs analytiques.
- Optimisez les performances : Pour les grands ensembles de données, envisagez d'optimiser votre code en utilisant des opérations vectorisées et en évitant les boucles inutiles.
- Gérez les valeurs manquantes : Soyez conscient des valeurs manquantes dans vos données et traitez-les de manière appropriée à l'aide de méthodes telles que
fillna()oudropna(). - Documentez votre code : Documentez clairement votre code pour expliquer le but de chaque opération
GroupByet le raisonnement derrière vos choix.
Conclusion
Pandas GroupBy est un outil puissant pour l'analyse de données, vous permettant de segmenter vos données, d'appliquer des fonctions à chaque groupe et d'extraire des informations précieuses. En maîtrisant les techniques d'agrégation et de transformation, vous pouvez libérer tout le potentiel de vos données et acquérir une compréhension plus approfondie des modèles et des tendances sous-jacents. Que vous analysiez des données de vente, des relevés de capteurs ou l'activité des médias sociaux, GroupBy peut vous aider à prendre des décisions basées sur les données et à atteindre vos objectifs analytiques. Adoptez la puissance de GroupBy et faites passer vos compétences en analyse de données au niveau supérieur.
Ce guide a fourni un aperçu complet des opérations Pandas GroupBy en mettant l'accent sur l'agrégation par rapport à la transformation. En utilisant ces techniques sur des données internationales, les scientifiques des données du monde entier peuvent extraire des informations commerciales cruciales à partir d'ensembles de données divers. Entraînez-vous, expérimentez et adaptez ces techniques à vos besoins spécifiques pour exploiter tout le potentiel de Pandas.